package it.unipg.bipod.dataAccess;

import it.unipg.bipod.dataModel.*;

import java.util.Properties;

/**
 * SharedDataManager fornisce metodi di accesso alle risorse condivise da BiPoD
 * con altre applicazioni.<br>
 * In particolare fornise metodi per aggiungere, cercare, modificare ed eliminare
 * Utenti.
 * 
 * @author Lorenzo Porzi
 *
 */
interface SharedDataManager {
	
	/**
	 * Si connette alla sorgente di dati utilizzando le impostazioni fornite.
	 * 
	 * @param settings Un {@code Properties} di impostazioni
	 * @throws DataAccessException
	 */
	public void connect(Properties settings) throws DataAccessException;

	/**
	 * Recupera un'entita' Utente dalla base di dati condivisa.
	 * 
	 * @param NomeUtente Il nomeUtente dell'Utente da cercare.
	 * @return L'entià Utente trovata oppure null se non viene trovato niente.
	 * @throws DataAccessException
	 */
	public Utente getUtenteFromNomeUtente(String nomeUtente) throws DataAccessException;
	
	/**
	 * Inserisce un'entita' Utente nella base di dati condivisa.
	 * 
	 * @param utente L'entita' Utente da inserire
	 * @return {@code true} se l'operazione va a buon fine, {@code false} altrimenti.
	 * @throws DataAccessException
	 */
	public boolean insertUtente(Utente utente) throws DataAccessException;
	
	/**
	 * Modifica l'entita' Utente della base di dati condivisa avente lo stesso nomeUtente
	 * dell'entita' specificata, aggiornando tutti i campi in modo da rispecchiare quelli
	 * dell'argomento.
	 * 
	 * @param utente L'entita' Utente da modificare
	 * @return {@code true} se l'operazione va a buon fine, {@code false} altrimenti.
	 * @throws DataAccessException
	 */
	public boolean updateUtente(Utente utente) throws DataAccessException;
	
	/**
	 * Elimina l'entita' Utente della base di dati condivisa avente il nomeUtente specificato.
	 * 
	 * @param nomeUtente Il nomeUtente dell'entita' da eliminare.
	 * @return {@code true} se l'operazione va a buon fine, {@code false} altrimenti.
	 * @throws DataAccessException
	 */
	public boolean removeUtente(String nomeUtente) throws DataAccessException;
	
	/**
	 * Cerca nella base di dati condivisa tutte le entita' Docente.
	 * 
	 * @return un array contenente le entita' Docente trovate.
	 * @throws DataAccessException
	 */
	public Docente[] getAllDocente() throws DataAccessException;
	
	/**
	 * Cerca nella base di dati condivisa tutte le entita' Segretario.
	 * 
	 * @return un array contenente le entita' Segretario trovate.
	 * @throws DataAccessException
	 */
	public Segretario[] getAllSegretario() throws DataAccessException;
	
	/**
	 * Cerca nella base di dati condivisa tutte le entita' Utente.
	 * 
	 * @return un array contenente le entita' Utente trovate.
	 * @throws DataAccessException
	 */
	public Utente[] getAllUtente() throws DataAccessException;
}